package com.stained.white.goat.view;

import com.stained.white.goat.graphic.Dimension;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

/**
 * 次元情報Viewクラス.
 * @author stained white goat
 *
 */
public class DimensionView extends View {

    /** view次元情報. */
    private Dimension dimension;
    /** 描画領域. */
    private Rect drawRegion;

    /**
     * コンストラクター.
     * @param context context
     * @param attrs attrs
     */
    public DimensionView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initParameter(new Dimension(
                attrs.getAttributeIntValue(null, "dimension_width", 0),
                attrs.getAttributeIntValue(null, "dimension_height", 0)));
    }

    /**
     * コンストラクター.
     * @param context context
     * @param dimension view次元情報
     */
    public DimensionView(Context context, Dimension dimension) {
        super(context, null);
        initParameter(dimension);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(
                this.dimension.getWidth(), this.dimension.getHeight());
        initRegion();
    }

    protected void initParameter(Dimension dimension) {
        setFocusable(true);
        // フィールド初期化
        this.dimension = dimension;
    }

    /**
     * Viewの表示領域を初期化.
     */
    protected void initRegion() {
        int margin = getMargin();
        this.drawRegion = new Rect(margin, margin,
                getMeasuredWidth() - margin,
                getMeasuredHeight() - margin);
    }

    /**
     * 描画領域マージン取得.
     * @return 描画領域マージン
     */
    protected int getMargin() {
        return 0;
    }

    /**
     * 描画領域取得.
     * @return 描画領域
     */
    protected Rect getDrawRegion() {
        return this.drawRegion;
    }
}
